#!/bin/bash

if [ -d test/tmp ]
then
    rm -rf test/tmp/*
else
    mkdir test/tmp
fi

if [ -d data/grammar/dump ]
then
    rm -rf data/grammar/dump/*
else
    mkdir data/grammar/dump
fi

# Проверка лексического анализа токенов из заданного файла и параметров.
test/mr-test-token
diff -Z test/samples/test-token.out test/tmp/test-token.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-token\033[0m"
  exit 1
else
  echo -e "test/mr-test-token"
fi

# Проверка работы с библиотекой JSON.
test/mr-test-json-serialization-JsonSerialization
diff -Z test/samples/test-json-serialization-JsonSerialization.out test/tmp/test-json-serialization-JsonSerialization.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-json-serialization-JsonSerialization\033[0m"
  exit 1
else
  echo -e "test/mr-test-json-serialization-JsonSerialization"
fi

# Проверка загрузки из JSON-описания лексических параметров.
test/mr-test-json-serialization-LexicalParametersLoader
diff -Z test/samples/test-json-serialization-LexicalParametersLoader.out test/tmp/test-json-serialization-LexicalParametersLoader.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-json-serialization-LexicalParametersLoader\033[0m"
  exit 1
else
  echo -e "test/mr-test-json-serialization-LexicalParametersLoader"
fi

# Проверка работы с парсером JSON.
test/mr-test-json-Parser
diff -Z test/samples/test-json-Parser.out test/tmp/test-json-Parser.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-json-Parser\033[0m"
  exit 1
else
  echo -e "test/mr-test-json-Parser"
fi

# Проверка работы с анализатором JSON.
test/mr-test-json-AnalyzeData
diff -Z test/samples/test-json-AnalyzeData.out test/tmp/test-json-AnalyzeData.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-json-AnalyzeData\033[0m"
  exit 1
else
  echo -e "test/mr-test-json-AnalyzeData"
fi

# Проверка работы с анализатором JSON5.
test/mr-test-json5-AnalyzeData
diff -Z test/samples/test-json5-AnalyzeData.out test/tmp/test-json5-AnalyzeData.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-json5-AnalyzeData\033[0m"
  exit 1
else
  echo -e "test/mr-test-json5-AnalyzeData"
fi

# Проверка модулей.
test/mr-test-module
diff -Z test/samples/test-module.out test/tmp/test-module.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-module\033[0m"
  exit 1
else
  echo -e "test/mr-test-module"
fi

# Проверка утилиты анализа грамматики simodo-grammatize.
test/mr-test-grammatize
diff -Z test/samples/test-grammatize.out test/tmp/test-grammatize.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-grammatize\033[0m"
  exit 1
else
  echo -e "test/mr-test-grammatize"
fi

# Проверка утилиты анализа грамматики simodo-grammatize #2.
test/mr-test-grammatize2
diff -Z test/samples/test-grammatize2.out test/tmp/test-grammatize2.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-grammatize2\033[0m"
  exit 1
else
  echo -e "test/mr-test-grammatize2"
fi

# Проверка утилиты анализа грамматики simodo-parse.
test/mr-test-parse
diff -Z test/samples/test-parse.out test/tmp/test-parse.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-parse\033[0m"
  exit 1
else
  echo -e "test/mr-test-parse"
fi

# Проверка загрузки параметров.
test/mr-test-setup-load
diff -Z test/samples/test-setup-load.out test/tmp/test-setup-load.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-setup-load\033[0m"
  exit 1
else
  echo -e "test/mr-test-setup-load"
fi

# Проверка интерпретации языка SBL (примитивы операционной семантики)
test/mr-test-interpret-simodo-script-op
diff -Z test/samples/test-interpret-simodo-script-op.out test/tmp/test-interpret-simodo-script-op.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-interpret-simodo-script-op\033[0m"
  exit 1
else
  echo -e "test/mr-test-interpret-simodo-script-op"
fi

# Проверка интерпретации языка SBL (проверка операций)
test/mr-test-interpret-simodo-script-check
diff -Z test/samples/test-interpret-simodo-script-check.out test/tmp/test-interpret-simodo-script-check.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-interpret-simodo-script-check\033[0m"
  exit 1
else
  echo -e "test/mr-test-interpret-simodo-script-check"
fi

# Проверка интерпретации языка SBL (проверка простых алгоритмов)
test/mr-test-interpret-simodo-script-probe
diff -Z test/samples/test-interpret-simodo-script-probe.out test/tmp/test-interpret-simodo-script-probe.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-interpret-simodo-script-probe\033[0m"
  exit 1
else
  echo -e "test/mr-test-interpret-simodo-script-probe"
fi

# Проверка функций отладки программ на языке SBL
test/mr-test-interpret-simodo-script-debug
diff -Z test/samples/test-interpret-simodo-script-debug.out test/tmp/test-interpret-simodo-script-debug.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-interpret-simodo-script-debug\033[0m"
  exit 1
else
  echo -e "test/mr-test-interpret-simodo-script-debug"
fi

# Проверка использования "жёстких" модулей в интерпретаторе
test/mr-test-interpret-simodo-script-modules
diff -Z test/samples/test-interpret-simodo-script-modules.out test/tmp/test-interpret-simodo-script-modules.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-interpret-simodo-script-modules\033[0m"
  exit 1
else
  echo -e "test/mr-test-interpret-simodo-script-modules"
fi

# Проверка интерпретации языка SystemVerilog
test/mr-test-interpret-systemverilog
diff -Z test/samples/test-interpret-systemverilog.out test/tmp/test-interpret-systemverilog.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-interpret-systemverilog\033[0m"
  exit 1
else
  echo -e "test/mr-test-interpret-systemverilog"
fi

# Проверка интерпретации языка teragraph
# test/mr-test-interpret-teragraph
# diff -Z test/samples/test-interpret-teragraph.out test/tmp/test-interpret-teragraph.out
#
# if [ $? -ne 0 ]
# then
#   echo -e "\033[1mОшибка при выполнении теста test/mr-test-interpret-teragraph\033[0m"
#   exit 1
# else
#   echo -e "test/mr-test-interpret-teragraph"
# fi

# Проверка LSP-клиента (и сервера заодно).
test/mr-test-lsp-client
diff -Z test/samples/test-lsp-client.out test/tmp/test-lsp-client.out

if [ $? -ne 0 ]
then
  echo -e "\033[1mОшибка при выполнении теста test/mr-test-lsp-client\033[0m"
  exit 1
else
  echo -e "test/mr-test-lsp-client"
fi

